package gestionTransportObjetsApplications;

import gestionTransportObjetsGenerated.Transporteur;

import org.omg.CosNaming.NamingContext;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;

public class AppTranspThread extends Thread{
	
	private AppliTransporteurImpl appTransp;
	private Transporteur transp;
	
	/**
	 * Thread de l'appli transporteur
	 * @param appTransp
	 * @param transp
	 */
	public AppTranspThread(AppliTransporteurImpl appTransp, Transporteur transp) {
		this.appTransp = appTransp;
		this.transp = transp;
	}
	
	public void run() {
		String[] args = null;
		try {
			// Intialisation de l'ORB
	        //************************
	        org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);
	
	        // Gestion du POA
	        //****************
	        // Recuperation du POA
	        POA rootPOA = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
	
	        // Activer le servant au sein du POA et recuperer son ID
	        byte[] lAppId = rootPOA.activate_object(this.appTransp);
	
	        // Activer le POA manager
	        rootPOA.the_POAManager().activate();
	
	
	        // Enregistrement dans le service de nommage
	        //*******************************************
	        // Recuperation du naming service
	        NamingContext nameRoot=org.omg.CosNaming.NamingContextHelper.narrow(orb.resolve_initial_references("NameService"));
	
	        // Construction du nom a enregistrer
	        org.omg.CosNaming.NameComponent[] nameToRegister = new org.omg.CosNaming.NameComponent[1];
	        String nomObj = this.transp.numPrest;
	        nameToRegister[0] = new org.omg.CosNaming.NameComponent(nomObj,"");
	
	        // Enregistrement de l'objet CORBA dans le service de noms
	        nameRoot.rebind(nameToRegister,rootPOA.servant_to_reference(this.appTransp));
	        System.out.println("==> Nom '"+ nomObj + "' est enregistre dans le service de noms.");
	        orb.run();
		}
		catch (Exception e) {
			e.printStackTrace();
			Thread.currentThread().interrupt();
		}
	}

}
